package Principal;

import java.math.BigDecimal;

import Entidades.Barco;
import Entidades.Orientacion;
import Entidades.Tablero;
import Implementacion.BatallaNaval;
import Implementaciones.Conjunto;
import TDA.ConjuntoTDA;

public class PrincipalBatallaNaval {

	public static void main(String[] args) throws Exception {
		int dimensionT = 5;
		long tiempoInicio = System.currentTimeMillis(); 
		long tiempoFin;
		BigDecimal tiempoTotal;
		
		BatallaNaval batallaNaval = new BatallaNaval();
		ConjuntoTDA<Barco> barcos = completarBarcos();
		Tablero tablero = obtenerTablero(dimensionT);

		tiempoFin = System.currentTimeMillis();
		tiempoTotal = new BigDecimal(tiempoFin - tiempoInicio);
		System.out.println("Tiempo de setup: " + (tiempoTotal.divide(new BigDecimal(1000))).setScale(4) + " segundos");

		System.out.println("\nLos tableros posibles son los siguientes:");
		batallaNaval.resolverBatallaNaval(barcos, tablero);

		tiempoFin = System.currentTimeMillis();
		tiempoTotal = new BigDecimal(tiempoFin - tiempoInicio);
		System.out.println("Tiempo de resolucion: " + (tiempoTotal.divide(new BigDecimal(1000))).setScale(4) + " segundos");

	}

	public static ConjuntoTDA<Barco> completarBarcos() {
		ConjuntoTDA<Barco> b = new Conjunto<Barco>();
		b.inicializarConjunto();

		b.agregar(new Barco("B1", 1, Orientacion.Horizontal));
		b.agregar(new Barco("B2", 1, Orientacion.Horizontal));
		b.agregar(new Barco("B3", 1, Orientacion.Horizontal));
		b.agregar(new Barco("B4", 3, Orientacion.Vertical)); // Las orientaciones despues pueden cambiar
		b.agregar(new Barco("B5", 3, Orientacion.Vertical));

		return b;
	}

	public static Tablero obtenerTablero(int n) throws Exception {

		Tablero t = new Tablero(n);

		t.setearValorEnColumna(0, 4);
		t.setearValorEnColumna(1, 0);
		t.setearValorEnColumna(2, 1);
		t.setearValorEnColumna(3, 3);
		t.setearValorEnColumna(4, 1);
		t.setearValorEnfila(0, 2);
		t.setearValorEnfila(1, 1);
		t.setearValorEnfila(2, 2);
		t.setearValorEnfila(3, 1);
		t.setearValorEnfila(4, 3);

		return t;

	}

}
